#!/bin/bash 

#Tipo de Mensaje
INFORMATIVO="I"
WARNING="W"
ERROR="E"
ERROR_SEVERO="SE"

MAX_CARAC="120"

#=======================FUNCIONES=======================
#Función para chequear la existencia del directorio de los logs. En caso de no existir, se crea dicho directorio

function check_dir
{
	if [ ! -d "$LOGDIR" ]
		then
			mkdir -p "$LOGDIR"
	fi  
}

#función para verificar existencia del archivo correspondiente al comando, si no existe se crea

function check_file
{
	if [ ! -f "$1" ]
		then
			touch "$1"
	fi
}

#Función que para chequear el tamaño del log, en caso de superar el máxino establecido se reducirá el archivo.
#Parámetros #$1: ruta del archivo log

function check_size
{
#obtengo el tamaño del archivo log en bytes
	local size="$(stat -c %s $1)"

#calculo el tamaño maximo que puede tener el log en bytes
	let local LOGSIZEAUX=$LOGSIZE*1024

	if [ "$size" -gt "$LOGSIZEAUX" ]
		then
			reducirTamanio "$1" 
			WriteLog.sh "$1" "I" "Log Excedido"

	fi
}

#Función para disminuir tamaño del log en caso de que haya alcanzado el máximo  establecido 
#Parámetros #$1: ruta del archivo log

function reducirTamanio
{

	#se utiliza un archivo temporal donde se copiará un cuartro del total de las lineas del log
	archTemporal="$LOGDIR/archTmp"
	touch "$archTemporal"

	#obtengo la cantidad de lineas totales que se grabaron el archivo log
	local cantLineas="$(wc -l $1 | cut -d " " -f 1)"

	let local lineasACopiar=$cantLineas/4

	tail -"$lineasACopiar" "$1" > "$archTemporal"
	#trunco el archivo original
	mv "$archTemporal" "$1"
}

#función para validar el tipo de mensaje recibido
#$1: Tipo de mensaje

function validarTipoMensaje
{
	#validación tipo del mensaje
	if [ ! -z "$(echo "$1" | grep "^[[:upper:]]\{1,2\}$")" ]
		then
			if [ "$1" != "$INFORMATIVO" -a "$1" != "$WARNING" -a "$1" != "$ERROR" -a "$1" != "$ERROR_SEVERO" ]
				then 
					echo "Error en el segundo parametro, debe ser $INFORMATIVO, $WARNING, $ERROR o $ERROR_SEVERO."
					return 1
			else
				return 0
			fi
	else
		echo "Error. El tipo de mensaje debe ser uno o dos caracteres en mayuscula"
			return 1
	fi
}


#======================PRINCIPAL========================
#Parámetros #$1: Comando #$2: Tipo de Mensaje #$3: Mensaje

#validación de parametros
if [ "$#" -ne 2 -a "$#" -ne 3 ]
	then
		echo "Error cantidad de parametros, a continuación se muestra su uso."
		echo "Uso del script:"
		echo "1. GlogY.sh <comando> <mensaje>"
		echo "2. GlogY.sh <comando> <tipo de mensaje> <mensaje>"
		exit 1
fi

if [ "$#" -eq 3 ]
	then
		mensaje="$3"
else
	mensaje="$2"
fi

# verifico el entorno
if [ "$INICIO_OK" != "grupo06" ] && [ "$INICIO_ACTIVO" != "grupo06" ]
	then
		echo "ERROR: El ambiente no esta correctamente inicializado."
		echo "       Por favor ejecute InicioY.sh"
		exit 2
fi

#validación del comando pasado
#En primer lugar obtengo el nombre del comando
comando="$( echo "${1##*/}" | cut -d "." -f 1)"

if [ ! -z "$(echo "$comando" | grep "^[[:alpha:]]\{1,\}$")" ]
	then

		if [ "$comando" != "InicioY" -a "$comando" != "DetectaY" -a "$comando" != "Interprete" -a  "$comando" != "MoverY" ]
			then
				echo "Error en el primer parametro, debe ser InicioY, DetectaY o Interprete o MoverY."
				exit 1
		fi	
else
	echo "Error. El comando debe contener solo caracteres alfabeticos"
	exit 1
fi

if [ "$#" -eq 3 ]
	then
		validarTipoMensaje "$2"
		if [ "$?" -eq 1 ]
			then
				exit 1
		else
			tipo_Mensaje="$2"
		fi
else
	tipo_Mensaje="I"
fi

#validación del mensaje
let cantCaracteres=$(echo "$mensaje" | wc -c)-1
if [ "$cantCaracteres" -gt "$MAX_CARAC" ]
	then
		echo "El mensaje excede el máximo de caracteres establecido ($MAX_CARAC caracteres como máximo)"
		exit 1
fi

#verifico existencia del directorio del log
check_dir

#se verifica la existencia del archivo log correspondiente, si no existe se crea
archivo="$LOGDIR/$comando.$LOGEXT"
check_file "$archivo"

#grabo en el archivo log correspondiente
WriteLog.sh "$archivo" "$tipo_Mensaje" "$mensaje"

#chequeo el tamaño del archivo, si corresponde se truncará dicho archivo
check_size "$archivo"

#===========================FIN============================
